#include "internal.h"





/****************************************************************************/
#if (defined _WIN32 && defined _MSC_VER && !defined WIN_KERNEL_BUILD)

/* TRD : any Windows (user-mode) on any CPU with the Microsoft C compiler

         _WIN32             indicates 64-bit or 32-bit Windows
         _MSC_VER           indicates Microsoft C compiler
         !WIN_KERNEL_BUILD  indicates Windows user-mode
*/

void abstraction_thread_wait( thread_state_t thread_state )
{
  WaitForSingleObject( thread_state, INFINITE );

  return;
}

#endif





/****************************************************************************/
#if (defined _WIN32 && defined _MSC_VER && defined WIN_KERNEL_BUILD)

/* TRD : any Windows on any CPU with the Microsoft C compiler

         _WIN32            indicates 64-bit or 32-bit Windows
         _MSC_VER          indicates Microsoft C compiler
         WIN_KERNEL_BUILD  indicates Windows kernel
*/

void abstraction_thread_wait( thread_state_t thread_state )
{
  KeWaitForSingleObject( thread_state, Executive, KernelMode, FALSE, NULL );

  return;
}

#endif





/****************************************************************************/
#if (defined __unix__)

/* TRD : any UNIX on any CPU with any compiler

         I assumed pthreads is available on any UNIX.

         __unix__   indicates Solaris, Linux, HPUX, etc
*/

void abstraction_thread_wait( thread_state_t thread_state )
{
  pthread_join( thread_state,  NULL );

  return;
}

#endif

